#!/usr/bin/perl

$fh = get_fh();
sub get_fh{
    open(FOO, ">foo.txt") or die "foo: $!";
    return FOO;
}
hello($fh);
sub hello{
    my $handle = shift;
    print $handle "howdy folks!\n";
}
# 一旦试图传递给其他软件包的子例程（例如由模块导出的函数）时，就会遇到问题。
# 原因是将文件句柄作为字符串传递丢失了文件句柄的软件包信息。
# 如果我们将文件句柄 MY_FH从主脚本传递给以改革在MyUtils模块中定义的子例程，
# 则子例程会尽力访问一个名为MyUtils::MY_FH的文件句柄，而不是真正的main::MY_FH。
# 返回也会出现同样的问题。



# 正确移动文件句柄的方法是作为typeglob或typeglob引用（typeglob reference）移动。
# 为了将一个文件句柄转化成glob，只需要在名字前加一个星号（*）。
# $fh = *MY_FH;

# 为了将一个文件句柄转为typeglob的引用，只需要在其名字前加"\*"。
# $fh = \*MY_FH;

# 两种情况$fh都被用来传递文件句柄，但是作为typeglob引用要更加安全，
# 偶然的写入变量及替换符号表的危险更少。

# 但是这个demo用的也还好？ 不知道为啥
